package model;

import java.util.HashMap;

import FileIO.HidratadorPacman;

//Singleton!
public class Juego {

    private Escenario escenario;
    private int turno;
    private int ultimoTurnoLeido;
    private String sentidoPacman;
    private static Juego INSTANCE = null;
    private HashMap<String, String> movimientosPacman;
    private int numeroDeMovimientos;

    private synchronized static void createInstance() {
        if (INSTANCE == null) {
            INSTANCE = new Juego();
        }
    }

    public static Juego getInstance() {
        createInstance();
        return INSTANCE;
    }


    public void setTurno(int turno) {
		this.turno = turno;
	}

	@Override
    public Object clone() throws CloneNotSupportedException {
        throw new CloneNotSupportedException();
    }

    private Juego() {
        escenario = new Escenario();
        escenario.buildEscenarioDesdeArchivo();
        escenario.buildPersonajesEscenario();
        numeroDeMovimientos = 0;
    }

    public int getTurno() {
        return turno;
    }

    public final void iniciar() {
        //AQUI SE MANEJAN LOS TURNOS - Los fantasmas se mueven todos los turnos segun sus velocidades,
        //el pacman solo cuando es necesario
        System.out.println("Comienzo del juego");
        turno = Constantes.TURNO_INICIAL;
        while (true) {
            escenario.moverPacman(turno, leerMovimientoPacman());
            escenario.moverFantasmas(turno);
            escenario.actualizarEstado();
            escenario.generarArchivoSalidaConEstadoActual();
            if (escenario.checkearFinDeJuego()) {
                break;
            }
            turno++;
        }
        System.out.println("El Juego ha terminado");
    }

    private String leerMovimientoPacman() {
        //Leer Movimientos del pacman - Su velocidad es 2, por lo que se mueve cada 2 ticks!
        //Si el tick no es el del movimiento, descarto la direccion
        String direccion = "";
        int velocidadPacman = escenario.getPacMan().getVelocidad();
        direccion = HidratadorPacman.getInstance().obtenerDireccion();
        sentidoPacman = direccion;

        if (turno % velocidadPacman != 0) {
            direccion = "";
        }

        return direccion;
    }

    public String getSentidoPacman() {
        return sentidoPacman;
    }
}